c7bbeeea7b05de5b5e7a60ddc46117a38f6284d9,connector/src/main/java/org/jboss/as/connector/subsystems/datasources/DataSourceEnable.java,DataSourceEnable,execute,#OperationContext#ModelNode#,58
Before Change
}
if (context.getType() == OperationContext.Type.SERVER) {
context.addStep(new OperationStepHandler() {
public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
final ModelNode address = operation.require(OP_ADDR);
final String dsName = PathAddress.pathAddress(address).getLastElement().getValue();
final ServiceRegistry registry = context.getServiceRegistry(true);
if (isXa()) {
final ServiceName dataSourceConfigServiceName = XADataSourceConfigService.SERVICE_NAME_BASE
.append(dsName);
final ServiceController<?> dataSourceConfigController = registry
.getService(dataSourceConfigServiceName);
if (dataSourceConfigController != null) {
((XaDataSource) dataSourceConfigController.getValue()).setEnabled(true);
}
} else {
final ServiceName dataSourceConfigServiceName = DataSourceConfigService.SERVICE_NAME_BASE
.append(dsName);
final ServiceController<?> dataSourceConfigController = registry
.getService(dataSourceConfigServiceName);
if (dataSourceConfigController != null) {
((DataSource) dataSourceConfigController.getValue()).setEnabled(true);
}
}
final ServiceName dataSourceServiceName = AbstractDataSourceService.SERVICE_NAME_BASE.append(dsName);
final ServiceController<?> dataSourceController = registry.getService(dataSourceServiceName);
if (dataSourceController != null) {
if (!ServiceController.State.UP.equals(dataSourceController.getState())) {
dataSourceController.setMode(ServiceController.Mode.ACTIVE);
} else {
throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceAlreadyStarted("Data-source", dsName)));
}
} else {
throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceNotAvailable("Data-source", dsName)));
}
final ServiceName referenceServiceName = DataSourceReferenceFactoryService.SERVICE_NAME_BASE.append(dsName);
final ServiceController<?> referenceController = registry.getService(referenceServiceName);
if (referenceController != null && !ServiceController.State.UP.equals(referenceController.getState())) {
referenceController.setMode(ServiceController.Mode.ACTIVE);
}
final ServiceName binderServiceName = ContextNames.bindInfoFor(dsName).getBinderServiceName();
final ServiceController<?> binderController = registry.getService(binderServiceName);
if (binderController != null && !ServiceController.State.UP.equals(binderController.getState())) {
binderController.setMode(ServiceController.Mode.ACTIVE);
}
context.completeStep();
}
}, OperationContext.Stage.RUNTIME);
}
context.completeStep();
}
After Change
if (context.getType() == OperationContext.Type.SERVER) {
context.addStep(new OperationStepHandler() {
public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
final ServiceTarget serviceTarget = context.getServiceTarget();
final ServiceVerificationHandler verificationHandler = new ServiceVerificationHandler();
final ModelNode address = operation.require(OP_ADDR);
final String dsName = PathAddress.pathAddress(address).getLastElement().getValue();
final String jndiName = model.get(JNDINAME.getName()).asString();
final ServiceRegistry registry = context.getServiceRegistry(true);
final List<ServiceName> serviceNames = registry.getServiceNames();
if (isXa()) {
final ModifiableXaDataSource dataSourceConfig;
try {
dataSourceConfig = xaFrom(context, model);
} catch (ValidateException e) {
throw new OperationFailedException(e, new ModelNode().set(MESSAGES.failedToCreate("XaDataSource", operation, e.getLocalizedMessage())));
}
final ServiceName xaDataSourceConfigServiceName = XADataSourceConfigService.SERVICE_NAME_BASE.append(dsName);
final XADataSourceConfigService configService = new XADataSourceConfigService(dataSourceConfig);
final ServiceBuilder<?> builder = serviceTarget.addService(xaDataSourceConfigServiceName, configService);
builder.addListener(verificationHandler);
for (ServiceName name : serviceNames) {
if (xaDataSourceConfigServiceName.isParentOf(name) && !xaDataSourceConfigServiceName.equals(name)) {
final ServiceController<?> xaConfigProperyController = registry.getService(name);
if (xaConfigProperyController != null) {
if (! ServiceController.State.UP.equals(xaConfigProperyController.getState())) {
xaConfigProperyController.setMode(ServiceController.Mode.ACTIVE);
} else {
throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceAlreadyStarted("Data-source.xa-config-property", name)));
}
} else {
throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceNotAvailable("Data-source.xa-config-property", name)));
}
}
}
builder.install();
} else {
final ModifiableDataSource dataSourceConfig;
try {
dataSourceConfig = from(context, model);
} catch (ValidateException e) {
e.printStackTrace();
throw new OperationFailedException(e, new ModelNode().set(MESSAGES.failedToCreate("DataSource", operation, e.getLocalizedMessage())));
}
final ServiceName dataSourceCongServiceName = DataSourceConfigService.SERVICE_NAME_BASE.append(dsName);
final DataSourceConfigService configService = new DataSourceConfigService(dataSourceConfig);
final ServiceBuilder<?> builder = serviceTarget.addService(dataSourceCongServiceName, configService);
builder.addListener(verificationHandler);
for (ServiceName name : serviceNames) {
if (dataSourceCongServiceName.isParentOf(name) && !dataSourceCongServiceName.equals(name)) {
final ServiceController<?> dataSourceController = registry.getService(name);
if (dataSourceController != null) {
if (!ServiceController.State.UP.equals(dataSourceController.getState())) {
dataSourceController.setMode(ServiceController.Mode.ACTIVE);
} else {
throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceAlreadyStarted("Data-source.connectionProperty", name)));
}
} else {
throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceNotAvailable("Data-source.connectionProperty", name)));
}
}
}
builder.install();
}
context.completeStep();
}
}, OperationContext.Stage.RUNTIME);
context.addStep(new OperationStepHandler() {
public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
final ServiceTarget serviceTarget = context.getServiceTarget();
final ServiceVerificationHandler verificationHandler = new ServiceVerificationHandler();
final ModelNode address = operation.require(OP_ADDR);
final String dsName = PathAddress.pathAddress(address).getLastElement().getValue();
final String jndiName = model.get(JNDINAME.getName()).asString();
final ServiceRegistry registry = context.getServiceRegistry(true);
final ServiceName dataSourceServiceName = AbstractDataSourceService.SERVICE_NAME_BASE.append(dsName);
final List<ServiceName> serviceNames = registry.getServiceNames();
final ServiceController<?> dataSourceController = registry.getService(dataSourceServiceName);
if (dataSourceController != null) {
if (!ServiceController.State.UP.equals(dataSourceController.getState())) {
dataSourceController.setMode(ServiceController.Mode.ACTIVE);
} else {
throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceAlreadyStarted("Data-source", dsName)));
}
} else {
throw new OperationFailedException(new ModelNode().set(MESSAGES.serviceNotAvailable("Data-source", dsName)));
}
final DataSourceReferenceFactoryService referenceFactoryService = new DataSourceReferenceFactoryService();
final ServiceName referenceFactoryServiceName = DataSourceReferenceFactoryService.SERVICE_NAME_BASE
.append(dsName);
final ServiceBuilder<?> referenceBuilder = serviceTarget.addService(referenceFactoryServiceName,
referenceFactoryService).addDependency(dataSourceServiceName, javax.sql.DataSource.class,
referenceFactoryService.getDataSourceInjector());
referenceBuilder.install();
final ContextNames.BindInfo bindInfo = ContextNames.bindInfoFor(jndiName);
final BinderService binderService = new BinderService(bindInfo.getBindName());
final ServiceBuilder<?> binderBuilder = serviceTarget
.addService(bindInfo.getBinderServiceName(), binderService)
.addDependency(referenceFactoryServiceName, ManagedReferenceFactory.class, binderService.getManagedObjectInjector())
.addDependency(bindInfo.getParentContextServiceName(), ServiceBasedNamingStore.class, binderService.getNamingStoreInjector()).addListener(new AbstractServiceListener<Object>() {
public void transition(final ServiceController<? extends Object> controller, final ServiceController.Transition transition) {
switch (transition) {
case STARTING_to_UP: {
SUBSYSTEM_DATASOURCES_LOGGER.boundDataSource(jndiName);
break;
}
case START_REQUESTED_to_DOWN: {
SUBSYSTEM_DATASOURCES_LOGGER.unboundDataSource(jndiName);
break;
}
case REMOVING_to_REMOVED: {
SUBSYSTEM_DATASOURCES_LOGGER.debugf("Removed JDBC Data-source [%s]", jndiName);
break;
}
}
}
});
binderBuilder.setInitialMode(ServiceController.Mode.ACTIVE)
.addListener(verificationHandler);
binderBuilder.install();
context.completeStep();
}
}, OperationContext.Stage.RUNTIME);
}
context.completeStep();
}